<?php
/**
 * @category 	DashController.php
 * @author 		Sung Hoon, Cho (akdddnet@gmail.com)
 * @since		2011. 3. 2.
 * @license		BSD License
 * @version		0.1
 */

global $CFG;
require_once $CFG->FW_DIR."/mvc/Controller.php";
require_once $CFG->CLASSES_DIR."/member/MemberEB.php";

class DashController extends Controller {
	 
	function __construct() {
		parent::__construct(get_class());	// 꼭 부모의 construct를 실행 해줘야됩니다.
	} 
	
	function index() {
		// 기념일 정보 가져오기.
		$anniversary = $this->dao->anniversary_list(new DTO())->list;
		$anni_main_list = array();
		$anni_list = array();
		// 메인 항목, 일반 리스트 항목 구별하기
		if(!Common::isNullOrEmpty($anniversary)) {
			foreach($anniversary as $list) {
				// main에 출력될 기념일이 3개 이상일 경우 로직 처리하기가 애매하기 때문에 
				// main, 일반 기념을 별개로 구분 한 후 다시 기념일 갯수 만큼 반복을 돌아야될듯.
				if($list->ay_main) {
					array_push($anni_main_list, $list);
				} else {
					array_push($anni_list, $list); 
				}
			}
		}
			
		$this->tpl->assign(array(
				 "main_list"=>$this->getAnniversaryList($anni_main_list)
				,"list"=>$this->getAnniversaryList($anni_list, 4)
		));
	}
	
	private function getAnniversaryList($anniversary, $count=3) {
		$anni = array();
		
		$now = date("Y-m-d");

		// 메인에서 기념일 리스트 출력은.. 무조건 D-day 일자 기준으로 정렬 시킴.
		// 기념일이 동일일이 나타날수 있으므로 배열값 뒤에 숫자를 더 두는게 좋음.
		$i = 0;
		foreach($anniversary as $a) {
			$ay_date_strtotime = strtotime($a->ay_date);
			$ay_date = date("Y-m-d", $ay_date_strtotime);
			 
			switch($a->ay_display) {
				default :
				case 0 :
				case 1 :
					$print_day = 100;
					
					$interval = DateUtil::getDateDiff($ay_date, $now);
					$datetime = new DateTime($ay_date);
					
					
					if($a->ay_display) {
						$datetime = new DateTime($ay_date);
						$ay_date = $datetime->modify("-1 day")->format("Y-m-d");
						
						$a->days = DateUtil::getDateDiffFormat($ay_date, $now);
						
						$days = round($interval->days/100)*$print_day;
						$ay_date = $datetime->add(new DateInterval("P".$days."D"))->format("Y-m-d");
					} else {
						// d-day 날짜가 지났을 경우.
						if($now > $ay_date) {
							$days = round($interval->days/100)*$print_day+($print_day);
							$ay_date = $datetime->add(new DateInterval("P".$days."D"))->format("Y-m-d");
						}
						
						$a->days = DateUtil::getDateDiffFormat($ay_date, $now);
					}
					
					break;
				case 2 :	// 생일
					$getdate = getdate();
					
					// 월,일만 가져오기
					$birth_mon_day = date("m-d", $ay_date_strtotime);
					
					// 금년도 생일.
					$birthday = $getdate["year"]."-".$birth_mon_day;
					
					// 음력일 경우 양력 일자로 가져오기
					if(!$a->ay_is_solar) {
						$birthday = $this->getLunarToSolar($birthday);
					}
					
					// 금년도 생일이 지났으면 birthday를 다음해 생일날로 변경
					if($now > $birthday) {
						$birthday = ($getdate["year"]+1)."-".$birth_mon_day;
						
						// 음력일 경우 양력일자로 가져오기
						if(!$a->ay_is_solar) {
							$birthday = $this->getLunarToSolar($birthday);	
						}
					}
						 
					
					$ay_date = $birthday;

					$a->days = DateUtil::getDateDiffFormat($ay_date, $now);
					break;
			}
			
			
			$a->display_day = $ay_date;
			$anni[$ay_date."-".$i] = $a;

			$i++;
		}
		
		ksort($anni);
		array_splice($anni, $count);
		return $anni;
	}
	
	private function getLunarToSolar($solar_date) {
		$dto = new DTO();
		$dto->obj = date("Y/m/d", strtotime($solar_date));
		return date("Y-m-d", strtotime($this->dao->getLunarToSolar($dto)->obj->solar_date));
	}
}

